/*
 *	HT Editor
 *	alphaopc.cc
 *
 *	Copyright (C) 1999-2002 Sebastian Biallas (sb@biallas.net)
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License version 2 as
 *	published by the Free Software Foundation.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "alphaopc.h"

const char *alpha_reg_names[] = {
/*     0 */ "v0",
/*  1- 8 */ "t0","t1","t2","t3","t4","t5","t6","t7",
/*  9-15 */ "s0","s1","s2","s3","s4","s5","s6/fp",
/* 16-21 */ "a0","a1","a2","a3","a4","a5",
/* 22-25 */ "t8","t9","t10","t11",
/* 26-31 */ "ra","t12/pv","at","gp","sp","zero",
/* 32-39 */ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
/* 40-47 */ "f8", "f9", "f10","f11","f12","f13","f14","f15",
/* 48-55 */ "f16","f17","f18","f19","?",  "?",  "?",  "?",
/* 56-64 */ "?",  "?",  "?",  "?",  "?",  "?",  "?",  "fzero", "lit"
};


alpha_opcode_tab_entry alpha_instr_tbl[] =
{
	{0x00,"call_pal",	ALPHA_GROUP_PAL},
	{0x01,"opcode01",	ALPHA_ERROR},
	{0x02,"opcode02",	ALPHA_ERROR},
	{0x03,"opcode03",	ALPHA_ERROR},
	{0x04,"opcode04",	ALPHA_ERROR},
	{0x05,"opcode05",	ALPHA_ERROR},
	{0x06,"opcode06",	ALPHA_ERROR},
	{0x07,"opcode07",	ALPHA_ERROR},

	{0x08,"lda",		ALPHA_GROUP3},
	{0x09,"ldah",		ALPHA_GROUP3},
	{0x0a,"ldbu",		ALPHA_GROUP3},
	{0x0b,"ldq_u",		ALPHA_GROUP3},
	{0x0c,"ldwu",		ALPHA_GROUP3},
	{0x0d,"stw",		ALPHA_GROUP4},
	{0x0e,"stb",		ALPHA_GROUP4},
	{0x0f,"stq_u",		ALPHA_GROUP4},

	{0x10,"opcode10",	ALPHA_EXTENSION_10},
	{0x11,"opcode11",	ALPHA_EXTENSION_11},
	{0x12,"opcode12",	ALPHA_EXTENSION_12},
	{0x13,"opcode13",	ALPHA_EXTENSION_13},
	{0x14,"opcode14",	ALPHA_EXTENSION_14},
	{0x15,"opcode15",	ALPHA_EXTENSION_15},
	{0x16,"opcode16",	ALPHA_EXTENSION_16},
	{0x17,"opcode17",	ALPHA_EXTENSION_17},

	{0x18,"opcode18",	ALPHA_EXTENSION_18},
	{0x19,"pal19",		ALPHA_ERROR},
	{0x1a,"opcode1a",	ALPHA_EXTENSION_1A},
	{0x1b,"pal1b",		ALPHA_ERROR},
	{0x1c,"opcode1c",	ALPHA_EXTENSION_1C},
	{0x1d,"pal1d",		ALPHA_ERROR},
	{0x1e,"pal1e",		ALPHA_ERROR},
	{0x1f,"pal1f",		ALPHA_ERROR},
    
	{0x20,"ldf",		ALPHA_GROUP_FLD},
	{0x21,"ldg",		ALPHA_GROUP_FLD},
	{0x22,"lds",		ALPHA_GROUP_FLD},
	{0x23,"ldt",		ALPHA_GROUP_FLD},
	{0x24,"stf",		ALPHA_GROUP_FST},
	{0x25,"stg",		ALPHA_GROUP_FST},
	{0x26,"sts",		ALPHA_GROUP_FST},
	{0x27,"stt",		ALPHA_GROUP_FST},
    
	{0x28,"ldl",		ALPHA_GROUP3},
	{0x29,"ldq",		ALPHA_GROUP3},
	{0x2a,"ldl_l",		ALPHA_GROUP3},
	{0x2b,"ldq_l",		ALPHA_GROUP3},
	{0x2c,"stl",		ALPHA_GROUP4},
	{0x2d,"stq",		ALPHA_GROUP4},
	{0x2e,"stl_c",		ALPHA_GROUP4},
	{0x2f,"stq_c",		ALPHA_GROUP4},

	{0x30,"br",		ALPHA_GROUP_BRA},
	{0x31,"fbeq",		ALPHA_GROUP_FBR},
	{0x32,"fblt",		ALPHA_GROUP_FBR},
	{0x33,"fble",		ALPHA_GROUP_FBR},
	{0x34,"bsr",		ALPHA_GROUP_BRA},
	{0x35,"fbne",		ALPHA_GROUP_FBR},
	{0x36,"fbge",		ALPHA_GROUP_FBR},
	{0x37,"fbgt",		ALPHA_GROUP_FBR},
    
	{0x38,"blbc",		ALPHA_GROUP_BRA},
	{0x39,"beq",		ALPHA_GROUP_BRA},
	{0x3a,"blt",		ALPHA_GROUP_BRA},
	{0x3b,"ble",		ALPHA_GROUP_BRA},
	{0x3c,"blbs",		ALPHA_GROUP_BRA},
	{0x3d,"bne",		ALPHA_GROUP_BRA},
	{0x3e,"bge",		ALPHA_GROUP_BRA},
	{0x3f,"bgt",		ALPHA_GROUP_BRA}
};

/* table10 */
alpha_opcode_tab_entry alpha_instr_tbl_ext10[] =
{
	{0x00,"addl",		ALPHA_GROUP1},
	{0x02,"s4addl",	ALPHA_GROUP1},
	{0x09,"subl",		ALPHA_GROUP1},
	{0x0b,"s4subl",	ALPHA_GROUP1},
	{0x0f,"cmpbge",	ALPHA_GROUP1},
	{0x12,"s8addl",	ALPHA_GROUP1},
	{0x1b,"s8subl",	ALPHA_GROUP1},
	{0x1d,"cmpult",	ALPHA_GROUP1},
	{0x20,"addq",		ALPHA_GROUP1},
	{0x22,"s4addq",	ALPHA_GROUP1},
	{0x29,"subq",		ALPHA_GROUP1},
	{0x2b,"s4subq",	ALPHA_GROUP1},
	{0x2d,"cmpeq",		ALPHA_GROUP1},
	{0x32,"s8addq",	ALPHA_GROUP1},
	{0x3b,"s8subq",	ALPHA_GROUP1},
	{0x3d,"cmpule",	ALPHA_GROUP1},
	{0x40,"addl/v",	ALPHA_GROUP1},
	{0x49,"subl/v",	ALPHA_GROUP1},
	{0x4d,"cmplt",		ALPHA_GROUP1},
	{0x60,"addq/v",	ALPHA_GROUP1},
	{0x69,"subq/v",	ALPHA_GROUP1},
	{0x6d,"cmple",		ALPHA_GROUP1},
	{0xff,"",			ALPHA_ERROR}
};

/* table11 */
alpha_opcode_tab_entry alpha_instr_tbl_ext11[] =
{
	{0x00,"and",		ALPHA_GROUP1},
	{0x08,"bic",		ALPHA_GROUP1},
	{0x14,"cmovlbs",	ALPHA_GROUP1},
	{0x16,"cmovlbc",	ALPHA_GROUP1},
	{0x20,"bis",		ALPHA_GROUP1},
	{0x24,"cmoveq",	ALPHA_GROUP1},
	{0x26,"cmovne",	ALPHA_GROUP1},
	{0x28,"ornot",		ALPHA_GROUP1},
	{0x40,"xor",		ALPHA_GROUP1},
	{0x44,"cmovlt",	ALPHA_GROUP1},
	{0x46,"cmovge",	ALPHA_GROUP1},
	{0x48,"eqv",		ALPHA_GROUP1},
	{0x61,"amask",		ALPHA_GROUP3},
	{0x64,"cmovle",	ALPHA_GROUP1},
	{0x66,"cmovgt",	ALPHA_GROUP1},
	{0x6c,"implver",	ALPHA_GROUP3},
	{0xff,"",			ALPHA_ERROR}
};

/* table12 */
alpha_opcode_tab_entry alpha_instr_tbl_ext12[] =
{
	{0x00,"",			ALPHA_ERROR},
	{0x02,"mskbl",		ALPHA_GROUP1},
	{0x06,"extbl",		ALPHA_GROUP1},
	{0x0b,"insbl",		ALPHA_GROUP1},
	{0x12,"mskwl",		ALPHA_GROUP1},
	{0x16,"extwl",		ALPHA_GROUP1},
	{0x1b,"inswl",		ALPHA_GROUP1},
	{0x22,"mskll",		ALPHA_GROUP1},
	{0x26,"extll",		ALPHA_GROUP1},
	{0x2b,"insll",		ALPHA_GROUP1},
	{0x30,"zap",		ALPHA_GROUP1},
	{0x31,"zapnot",	ALPHA_GROUP1},
	{0x32,"mskql",		ALPHA_GROUP1},
	{0x34,"srl",		ALPHA_GROUP1},
	{0x36,"extql",		ALPHA_GROUP1},
	{0x39,"sll",		ALPHA_GROUP1},
	{0x3b,"insql",		ALPHA_GROUP1},
	{0x3c,"sra",		ALPHA_GROUP1},
	{0x52,"mskwh",		ALPHA_GROUP1},
	{0x57,"inswh",		ALPHA_GROUP1},
	{0x5a,"extwh",		ALPHA_GROUP1},
	{0x62,"msklh",		ALPHA_GROUP1},
	{0x67,"inslh",		ALPHA_GROUP1},
	{0x6a,"extlh",		ALPHA_GROUP1},
	{0x72,"mskqh",		ALPHA_GROUP1},
	{0x77,"insqh",		ALPHA_GROUP1},
	{0x7a,"extqh",		ALPHA_GROUP1},
	{0xff,"",			ALPHA_ERROR}
};

/* table13 */
alpha_opcode_tab_entry alpha_instr_tbl_ext13[] =
{
	{0x00,"mull",		ALPHA_GROUP1},
	{0x20,"mulq",		ALPHA_GROUP1},
	{0x30,"umulh",		ALPHA_GROUP1},
	{0x40,"mull/v",	ALPHA_GROUP1},
	{0x60,"mulq/v",	ALPHA_GROUP1},
	{0xff,"",			ALPHA_ERROR}
};

/* table14 */
alpha_opcode_tab_entry alpha_instr_tbl_ext14[] =
{
	{0x000,"",		ALPHA_ERROR},
	{0x004,"itofs",	ALPHA_GROUP_I2F},
	{0x00a,"sqrtf/c",	ALPHA_ERROR},
	{0x00b,"sqrts/c",	ALPHA_ERROR},
	{0x014,"itoff",	ALPHA_GROUP_I2F},
	{0x024,"itoft",	ALPHA_GROUP_I2F},
	{0x02a,"sqrtg/c",	ALPHA_ERROR},
	{0x02b,"sqrtt/c",	ALPHA_ERROR},
	{0x04b,"sqrts/m",	ALPHA_ERROR},
	{0x06b,"sqrtt/m",	ALPHA_ERROR},
	{0x08a,"sqrtf",	ALPHA_ERROR},
	{0x08b,"sqrts",	ALPHA_ERROR},
	{0x0aa,"sqrtg",	ALPHA_ERROR},
	{0x0ab,"sqrtt",	ALPHA_ERROR},
	{0x0cb,"sqrts/d",	ALPHA_ERROR},
	{0x0eb,"sqrtt/d",	ALPHA_ERROR},
	{0x10a,"sqrtf/uc",	ALPHA_ERROR},
	{0x10b,"sqrts/uc",	ALPHA_ERROR},
	{0x12a,"sqrtg/uc",	ALPHA_ERROR},
	{0x12b,"sqrtt/uc",	ALPHA_ERROR},
	{0x14b,"sqrts/um",	ALPHA_ERROR},
	{0x16b,"sqrtt/um",	ALPHA_ERROR},
	{0x18a,"sqrtf/u",	ALPHA_ERROR},
	{0x18b,"sqrts/u",	ALPHA_ERROR},
	{0x1aa,"sqrtg/u",	ALPHA_ERROR},
	{0x1ab,"sqrtt/u",	ALPHA_ERROR},
	{0x1cb,"sqrts/ud",	ALPHA_ERROR},
	{0x1eb,"sqrtt/ud",	ALPHA_ERROR},
	{0x40a,"sqrtf/sc",	ALPHA_ERROR},
	{0x42a,"sqrtg/sc",	ALPHA_ERROR},
	{0x48a,"sqrtf/s",	ALPHA_ERROR},
	{0x4aa,"sqrtg/s",	ALPHA_ERROR},
	{0x50a,"sqrtf/suc",	ALPHA_ERROR},
	{0x50b,"sqrts/suc",	ALPHA_ERROR},
	{0x52a,"sqrtg/suc",	ALPHA_ERROR},
	{0x52b,"sqrtt/suc",	ALPHA_ERROR},
	{0x54b,"sqrts/sum",	ALPHA_ERROR},
	{0x56b,"sqrtt/sum",	ALPHA_ERROR},
	{0x58a,"sqrtf/su",	ALPHA_ERROR},
	{0x58b,"sqrts/su",	ALPHA_ERROR},
	{0x5aa,"sqrtg/su",	ALPHA_ERROR},
	{0x5ab,"sqrtt/su",	ALPHA_ERROR},
	{0x5cb,"sqrts/sud",	ALPHA_ERROR},
	{0x5eb,"sqrtt/sud",	ALPHA_ERROR},
	{0x70b,"sqrts/suic",ALPHA_ERROR},
	{0x72b,"sqrtt/suic",ALPHA_ERROR},
	{0x74b,"sqrts/suim",ALPHA_ERROR},
	{0x76b,"sqrtt/suim",ALPHA_ERROR},
	{0x78b,"sqrts/sui",	ALPHA_ERROR},
	{0x7ab,"sqrtt/sui",	ALPHA_ERROR},
	{0x7cb,"sqrts/suid",ALPHA_ERROR},
	{0x7eb,"sqrtt/suid",ALPHA_ERROR},
	{0xfff,"",		ALPHA_ERROR}
};

/* table15 */
alpha_opcode_tab_entry alpha_instr_tbl_ext15[] =
{
	{0x000,"addf/c",	ALPHA_GROUP2},
	{0x001,"subf/c",	ALPHA_GROUP2},
	{0x002,"mulf/c",	ALPHA_GROUP2},
	{0x003,"divf/c",	ALPHA_GROUP2},
	{0x01e,"cvtdg/c",	ALPHA_GROUP2},
	{0x020,"addg/c",	ALPHA_GROUP2},
	{0x021,"subg/c",	ALPHA_GROUP2},
	{0x022,"mulg/c",	ALPHA_GROUP2},
	{0x023,"divg/c",	ALPHA_GROUP2},
	{0x02c,"cvtgf/c",	ALPHA_GROUP2},
	{0x02d,"cvtgd/c",	ALPHA_GROUP2},
	{0x02f,"cvtgq/c",	ALPHA_GROUP2},
	{0x03c,"cvtqf/c",	ALPHA_GROUP2},
	{0x03e,"cvtqg/c",	ALPHA_GROUP2},
	{0x080,"addf",		ALPHA_GROUP2},
	{0x081,"subf",		ALPHA_GROUP2},
	{0x082,"mulf",		ALPHA_GROUP2},
	{0x083,"divf",		ALPHA_GROUP2},
	{0x09e,"cvtdg",	ALPHA_GROUP2},
	{0x0a0,"addg",		ALPHA_GROUP2},
	{0x0a1,"subg",		ALPHA_GROUP2},
	{0x0a2,"mulg",		ALPHA_GROUP2},
	{0x0a3,"divg",		ALPHA_GROUP2},
	{0x0a5,"cmpgeq",	ALPHA_GROUP2},
	{0x0a6,"cmpglt",	ALPHA_GROUP2},
	{0x0a7,"cmpgle",	ALPHA_GROUP2},
	{0x0ac,"cvtgf",	ALPHA_GROUP2},
	{0x0ad,"cvtgd",	ALPHA_GROUP2},
	{0x0af,"cvtgq",	ALPHA_GROUP2},
	{0x0bc,"cvtqf",	ALPHA_GROUP2},
	{0x0be,"cvtqg",	ALPHA_GROUP2},
	{0x100,"addf/uc",	ALPHA_GROUP2},
	{0x101,"subf/uc",	ALPHA_GROUP2},
	{0x102,"mulf/uc",	ALPHA_GROUP2},
	{0x103,"divf/uc",	ALPHA_GROUP2},
	{0x11e,"cvtdg/uc",	ALPHA_GROUP2},
	{0x120,"addg/uc",	ALPHA_GROUP2},
	{0x121,"subg/uc",	ALPHA_GROUP2},
	{0x122,"mulg/uc",	ALPHA_GROUP2},
	{0x123,"divg/uc",	ALPHA_GROUP2},
	{0x12c,"cvtgf/uc",	ALPHA_GROUP2},
	{0x12d,"cvtgd/uc",	ALPHA_GROUP2},
	{0x12f,"cvtgq/vc",	ALPHA_GROUP2},
	{0x180,"addf/u",	ALPHA_GROUP2},
	{0x181,"subf/u",	ALPHA_GROUP2},
	{0x182,"mulf/u",	ALPHA_GROUP2},
	{0x183,"divf/u",	ALPHA_GROUP2},
	{0x19e,"cvtdg/u",	ALPHA_GROUP2},
	{0x1a0,"addg/u",	ALPHA_GROUP2},
	{0x1a1,"subg/u",	ALPHA_GROUP2},
	{0x1a2,"mulg/u",	ALPHA_GROUP2},
	{0x1a3,"divg/u",	ALPHA_GROUP2},
	{0x1ac,"cvtgf/u",	ALPHA_GROUP2},
	{0x1ad,"cvtgd/u",	ALPHA_GROUP2},
	{0x1af,"cvtgq/v",	ALPHA_GROUP2},
	{0x400,"addf/sc",	ALPHA_GROUP2},
	{0x401,"subf/sc",	ALPHA_GROUP2},
	{0x402,"mulf/sc",	ALPHA_GROUP2},
	{0x403,"divf/sc",	ALPHA_GROUP2},
	{0x41e,"cvtdg/sc",	ALPHA_GROUP2},
	{0x420,"addg/sc",	ALPHA_GROUP2},
	{0x421,"subg/sc",	ALPHA_GROUP2},
	{0x422,"mulg/sc",	ALPHA_GROUP2},
	{0x423,"divg/sc",	ALPHA_GROUP2},
	{0x42c,"cvtgf/sc",	ALPHA_GROUP2},
	{0x42d,"cvtgd/sc",	ALPHA_GROUP2},
	{0x42f,"cvtgq/sc",	ALPHA_GROUP2},
	{0x480,"addf/s",	ALPHA_GROUP2},
	{0x481,"subf/s",	ALPHA_GROUP2},
	{0x482,"mulf/s",	ALPHA_GROUP2},
	{0x483,"divf/s",	ALPHA_GROUP2},
	{0x49e,"cvtdg/s",	ALPHA_GROUP2},
	{0x4a0,"addg/s",	ALPHA_GROUP2},
	{0x4a1,"subg/s",	ALPHA_GROUP2},
	{0x4a2,"mulg/s",	ALPHA_GROUP2},
	{0x4a3,"divg/s",	ALPHA_GROUP2},
	{0x4a5,"cmpgeq/s",	ALPHA_GROUP2},
	{0x4a6,"cmpglt/s",	ALPHA_GROUP2},
	{0x4a7,"cmpgle/s",	ALPHA_GROUP2},
	{0x4ac,"cvtgf/s",	ALPHA_GROUP2},
	{0x4ad,"cvtgd/s",	ALPHA_GROUP2},
	{0x4af,"cvtgq/s",	ALPHA_GROUP2},
	{0x500,"addf/suc",	ALPHA_GROUP2},
	{0x501,"subf/suc",	ALPHA_GROUP2},
	{0x502,"mulf/suc",	ALPHA_GROUP2},
	{0x503,"divf/suc",	ALPHA_GROUP2},
	{0x51e,"cvtdg/suc",	ALPHA_GROUP2},
	{0x520,"addg/suc",	ALPHA_GROUP2},
	{0x521,"subg/suc",	ALPHA_GROUP2},
	{0x522,"mulg/suc",	ALPHA_GROUP2},
	{0x523,"divg/suc",	ALPHA_GROUP2},
	{0x52c,"cvtgf/suc",	ALPHA_GROUP2},
	{0x52d,"cvtgd/suc",	ALPHA_GROUP2},
	{0x52f,"cvtgq/svc",	ALPHA_GROUP2},
	{0x580,"addf/su",	ALPHA_GROUP2},
	{0x581,"subf/su",	ALPHA_GROUP2},
	{0x582,"mulf/su",	ALPHA_GROUP2},
	{0x583,"divf/su",	ALPHA_GROUP2},
	{0x59e,"cvtdg/su",	ALPHA_GROUP2},
	{0x5a0,"addg/su",	ALPHA_GROUP2},
	{0x5a1,"subg/su",	ALPHA_GROUP2},
	{0x5a2,"mulg/su",	ALPHA_GROUP2},
	{0x5a3,"divg/su",	ALPHA_GROUP2},
	{0x5ac,"cvtgf/su",	ALPHA_GROUP2},
	{0x5ad,"cvtgd/su",	ALPHA_GROUP2},
	{0x5af,"cvtgq/sv",	ALPHA_GROUP2},
	{0xfff,"",		ALPHA_ERROR}
};

/* table16 */ 
alpha_opcode_tab_entry alpha_instr_tbl_ext16[] =
{
	{0x000,"adds/c",	ALPHA_GROUP2},
	{0x001,"subs/c",	ALPHA_GROUP2},
	{0x002,"muls/c",	ALPHA_GROUP2},
	{0x003,"divs/c",	ALPHA_GROUP2},
	{0x020,"addt/c",	ALPHA_GROUP2},
	{0x021,"subt/c",	ALPHA_GROUP2},
	{0x022,"mult/c",	ALPHA_GROUP2},
	{0x023,"divt/c",	ALPHA_GROUP2},
	{0x02c,"cvtts/c",	ALPHA_GROUP2},
	{0x02f,"cvttq/c",	ALPHA_GROUP2},
	{0x03c,"cvtqs/c",	ALPHA_GROUP2},
	{0x03e,"cvtqt/c",	ALPHA_GROUP2},
	{0x040,"adds/m",	ALPHA_GROUP2},
	{0x041,"subs/m",	ALPHA_GROUP2},
	{0x042,"muls/m",	ALPHA_GROUP2},
	{0x043,"divs/m",	ALPHA_GROUP2},
	{0x060,"addt/m",	ALPHA_GROUP2},
	{0x061,"subt/m",	ALPHA_GROUP2},
	{0x062,"mult/m",	ALPHA_GROUP2},
	{0x063,"divt/m",	ALPHA_GROUP2},
	{0x06c,"cvtts/m",	ALPHA_GROUP2},
	{0x06f,"cvttq/m",	ALPHA_GROUP2},
	{0x07c,"cvtqs/m",	ALPHA_GROUP2},
	{0x07e,"cvtqt/m",	ALPHA_GROUP2},
	{0x080,"adds",		ALPHA_GROUP2},
	{0x081,"subs",		ALPHA_GROUP2},
	{0x082,"muls",		ALPHA_GROUP2},
	{0x083,"divs",		ALPHA_GROUP2},
	{0x0a0,"addt",		ALPHA_GROUP2},
	{0x0a1,"subt",		ALPHA_GROUP2},
	{0x0a2,"mult",		ALPHA_GROUP2},
	{0x0a3,"divt",		ALPHA_GROUP2},
	{0x0a4,"cmptun",	ALPHA_GROUP2},
	{0x0a5,"cmpteq",	ALPHA_GROUP2},
	{0x0a6,"cmptlt",	ALPHA_GROUP2},
	{0x0a7,"cmptle",	ALPHA_GROUP2},
	{0x0ac,"cvtts",	ALPHA_GROUP2},
	{0x0af,"cvttq",	ALPHA_GROUP2},
	{0x0bc,"cvtqs",	ALPHA_GROUP2},
	{0x0be,"cvtqt",	ALPHA_GROUP2},
	{0x0c0,"adds/d",	ALPHA_GROUP2},
	{0x0c1,"subs/d",	ALPHA_GROUP2},
	{0x0c2,"muls/d",	ALPHA_GROUP2},
	{0x0c3,"divs/d",	ALPHA_GROUP2},
	{0x0e0,"addt/d",	ALPHA_GROUP2},
	{0x0e1,"subt/d",	ALPHA_GROUP2},
	{0x0e2,"mult/d",	ALPHA_GROUP2},
	{0x0e3,"divt/d",	ALPHA_GROUP2},
	{0x0ec,"cvtts/d",	ALPHA_GROUP2},
	{0x0ef,"cvttq/d",	ALPHA_GROUP2},
	{0x0fc,"cvtqs/d",	ALPHA_GROUP2},
	{0x0fe,"cvtqt/d",	ALPHA_GROUP2},
	{0x100,"adds/uc",	ALPHA_GROUP2},
	{0x101,"subs/uc",	ALPHA_GROUP2},
	{0x102,"muls/uc",	ALPHA_GROUP2},
	{0x103,"divs/uc",	ALPHA_GROUP2},
	{0x120,"addt/uc",	ALPHA_GROUP2},
	{0x121,"subt/uc",	ALPHA_GROUP2},
	{0x122,"mult/uc",	ALPHA_GROUP2},
	{0x123,"divt/uc",	ALPHA_GROUP2},
	{0x12c,"cvtts/uc",	ALPHA_GROUP2},
	{0x12f,"cvttq/vc",	ALPHA_GROUP2},
	{0x140,"adds/um",	ALPHA_GROUP2},
	{0x141,"subs/um",	ALPHA_GROUP2},
	{0x142,"muls/um",	ALPHA_GROUP2},
	{0x143,"divs/um",	ALPHA_GROUP2},
	{0x160,"addt/um",	ALPHA_GROUP2},
	{0x161,"subt/um",	ALPHA_GROUP2},
	{0x162,"mult/um",	ALPHA_GROUP2},
	{0x163,"divt/um",	ALPHA_GROUP2},
	{0x16c,"cvtts/um",	ALPHA_GROUP2},
	{0x16f,"cvttq/vm",	ALPHA_GROUP2},
	{0x180,"adds/u",	ALPHA_GROUP2},
	{0x181,"subs/u",	ALPHA_GROUP2},
	{0x182,"muls/u",	ALPHA_GROUP2},
	{0x183,"divs/u",	ALPHA_GROUP2},
	{0x1a0,"addt/u",	ALPHA_GROUP2},
	{0x1a1,"subt/u",	ALPHA_GROUP2},
	{0x1a2,"mult/u",	ALPHA_GROUP2},
	{0x1a3,"divt/u",	ALPHA_GROUP2},
	{0x1ac,"cvtts/u",	ALPHA_GROUP2},
	{0x1af,"cvttq/v",	ALPHA_GROUP2},
	{0x1c0,"adds/ud",	ALPHA_GROUP2},
	{0x1c1,"subs/ud",	ALPHA_GROUP2},
	{0x1c2,"muls/ud",	ALPHA_GROUP2},
	{0x1c3,"divs/ud",	ALPHA_GROUP2},
	{0x1e0,"addt/ud",	ALPHA_GROUP2},
	{0x1e1,"subt/ud",	ALPHA_GROUP2},
	{0x1e2,"mult/ud",	ALPHA_GROUP2},
	{0x1e3,"divt/ud",	ALPHA_GROUP2},
	{0x1ec,"cvtts/ud",	ALPHA_GROUP2},
	{0x1ef,"cvttq/vd",	ALPHA_GROUP2},
	{0x2ac,"cvtst",	ALPHA_GROUP2},
	{0x500,"adds/suc",	ALPHA_GROUP2},
	{0x501,"subs/suc",	ALPHA_GROUP2},
	{0x502,"muls/suc",	ALPHA_GROUP2},
	{0x503,"divs/suc",	ALPHA_GROUP2},
	{0x520,"addt/suc",	ALPHA_GROUP2},
	{0x521,"subt/suc",	ALPHA_GROUP2},
	{0x522,"mult/suc",	ALPHA_GROUP2},
	{0x523,"divt/suc",	ALPHA_GROUP2},
	{0x52c,"cvtts/suc",	ALPHA_GROUP2},
	{0x52f,"cvttq/svc",	ALPHA_GROUP2},
	{0x540,"adds/sum",	ALPHA_GROUP2},
	{0x541,"subs/sum",	ALPHA_GROUP2},
	{0x542,"muls/sum",	ALPHA_GROUP2},
	{0x543,"divs/sum",	ALPHA_GROUP2},
	{0x560,"addt/sum",	ALPHA_GROUP2},
	{0x561,"subt/sum",	ALPHA_GROUP2},
	{0x562,"mult/sum",	ALPHA_GROUP2},
	{0x563,"divt/sum",	ALPHA_GROUP2},
	{0x56c,"cvtts/sum",	ALPHA_GROUP2},
	{0x56f,"cvttq/svm",	ALPHA_GROUP2},
	{0x580,"adds/su",	ALPHA_GROUP2},
	{0x581,"subs/su",	ALPHA_GROUP2},
	{0x582,"muls/su",	ALPHA_GROUP2},
	{0x583,"divs/su",	ALPHA_GROUP2},
	{0x5a0,"addt/su",	ALPHA_GROUP2},
	{0x5a1,"subt/su",	ALPHA_GROUP2},
	{0x5a2,"mult/su",	ALPHA_GROUP2},
	{0x5a3,"divt/su",	ALPHA_GROUP2},
	{0x5a4,"cmptun/su",	ALPHA_GROUP2},
	{0x5a5,"cmpteq/su",	ALPHA_GROUP2},
	{0x5a6,"cmptlt/su",	ALPHA_GROUP2},
	{0x5a7,"cmptle/su",	ALPHA_GROUP2},
	{0x5ac,"cvtts/su",	ALPHA_GROUP2},
	{0x5af,"cvttq/sv",	ALPHA_GROUP2},
	{0x5c0,"adds/sud",	ALPHA_GROUP2},
	{0x5c1,"subs/sud",	ALPHA_GROUP2},
	{0x5c2,"muls/sud",	ALPHA_GROUP2},
	{0x5c3,"divs/sud",	ALPHA_GROUP2},
	{0x5e0,"addt/sud",	ALPHA_GROUP2},
	{0x5e1,"subt/sud",	ALPHA_GROUP2},
	{0x5e2,"mult/sud",	ALPHA_GROUP2},
	{0x5e3,"divt/sud",	ALPHA_GROUP2},
	{0x5ec,"cvtts/sud",	ALPHA_GROUP2},
	{0x5ef,"cvttq/svd",	ALPHA_GROUP2},
	{0x6ac,"cvtst/s",	ALPHA_GROUP2},
	{0x700,"adds/suic",	ALPHA_GROUP2},
	{0x701,"subs/suic",	ALPHA_GROUP2},
	{0x702,"muls/suic",	ALPHA_GROUP2},
	{0x703,"divs/suic",	ALPHA_GROUP2},
	{0x720,"addt/suic",	ALPHA_GROUP2},
	{0x721,"subt/suic",	ALPHA_GROUP2},
	{0x722,"mult/suic",	ALPHA_GROUP2},
	{0x723,"divt/suic",	ALPHA_GROUP2},
	{0x72c,"cvtts/suic",ALPHA_GROUP2},
	{0x72f,"cvttq/svic",ALPHA_GROUP2},
	{0x73c,"cvtqs/suic",ALPHA_GROUP2},
	{0x73e,"cvtqt/suic",ALPHA_GROUP2},
	{0x740,"adds/suim",	ALPHA_GROUP2},
	{0x741,"subs/suim",	ALPHA_GROUP2},
	{0x742,"muls/suim",	ALPHA_GROUP2},
	{0x743,"divs/suim",	ALPHA_GROUP2},
	{0x760,"addt/suim",	ALPHA_GROUP2},
	{0x761,"subt/suim",	ALPHA_GROUP2},
	{0x762,"mult/suim",	ALPHA_GROUP2},
	{0x763,"divt/suim",	ALPHA_GROUP2},
	{0x76c,"cvtts/suim",ALPHA_GROUP2},
	{0x76f,"cvttq/svim",ALPHA_GROUP2},
	{0x77c,"cvtqs/suim",ALPHA_GROUP2},
	{0x77e,"cvtqt/suim",ALPHA_GROUP2},
	{0x780,"adds/sui",	ALPHA_GROUP2},
	{0x781,"subs/sui",	ALPHA_GROUP2},
	{0x782,"muls/sui",	ALPHA_GROUP2},
	{0x783,"divs/sui",	ALPHA_GROUP2},
	{0x7a0,"addt/sui",	ALPHA_GROUP2},
	{0x7a1,"subt/sui",	ALPHA_GROUP2},
	{0x7a2,"mult/sui",	ALPHA_GROUP2},
	{0x7a3,"divt/sui",	ALPHA_GROUP2},
	{0x7ac,"cvtts/sui",	ALPHA_GROUP2},
	{0x7af,"cvttq/svi",	ALPHA_GROUP2},
	{0x7bc,"cvtqs/sui",	ALPHA_GROUP2},
	{0x7be,"cvtqt/sui",	ALPHA_GROUP2},
	{0x7c0,"adds/suid",	ALPHA_GROUP2},
	{0x7c1,"subs/suid",	ALPHA_GROUP2},
	{0x7c2,"muls/suid",	ALPHA_GROUP2},
	{0x7c3,"divs/suid",	ALPHA_GROUP2},
	{0x7e0,"addt/suid",	ALPHA_GROUP2},
	{0x7e1,"subt/suid",	ALPHA_GROUP2},
	{0x7e2,"mult/suid",	ALPHA_GROUP2},
	{0x7e3,"divt/suid",	ALPHA_GROUP2},
	{0x7ec,"cvtts/suid",ALPHA_GROUP2},
	{0x7ef,"cvttq/svid",ALPHA_GROUP2},
	{0x7fc,"cvtqs/suid",ALPHA_GROUP2},
	{0x7fe,"cvtqt/suid",ALPHA_GROUP2},
	{0xfff,"",		ALPHA_ERROR}
};

/* table17 */
alpha_opcode_tab_entry alpha_instr_tbl_ext17[] =
{    
	{0x000,"",		ALPHA_ERROR},
	{0x010,"cvtlq",	ALPHA_GROUP2},
	{0x020,"cpys",		ALPHA_GROUP2},
	{0x021,"cpysn",	ALPHA_GROUP2},
	{0x022,"cpyse",	ALPHA_GROUP2},
	{0x024,"mt_fpcr",	ALPHA_GROUP2},
	{0x025,"mf_fpcr",	ALPHA_GROUP2},
	{0x02a,"fcmoveq",	ALPHA_GROUP2},
	{0x02b,"fcmovne",	ALPHA_GROUP2},
	{0x02c,"fcmovlt",	ALPHA_GROUP2},
	{0x02d,"fcmovge",	ALPHA_GROUP2},
	{0x02e,"fcmovle",	ALPHA_GROUP2},
	{0x02f,"fcmovgt",	ALPHA_GROUP2},
	{0x030,"cvtql",	ALPHA_GROUP2},
	{0x130,"cvtql/v",	ALPHA_GROUP2},
	{0x530,"cvtql/sv",	ALPHA_GROUP2},
	{0xfff,"",		ALPHA_ERROR}
};
    
/* table18 */
alpha_opcode_tab_entry alpha_instr_tbl_ext18[] =
{
	{0x0000,"trapb",	ALPHA_GROUP3},
	{0x0400,"excb",	ALPHA_GROUP3},
	{0x4000,"mb",		ALPHA_GROUP3},
	{0x4400,"wmb",		ALPHA_GROUP3},
	{0x8000,"fetch",	ALPHA_GROUP3},
	{0xa000,"fetch_m",	ALPHA_GROUP3},
	{0xc000,"rpcc",	ALPHA_GROUP3},
	{0xe000,"rc",		ALPHA_ERROR},
	{0xe800,"ecb",		ALPHA_ERROR},
	{0xf000,"rs",		ALPHA_ERROR},
	{0xf800,"wh64",	ALPHA_ERROR},
	{0xffff,"",		ALPHA_ERROR}
};

/* table1a */
alpha_opcode_tab_entry alpha_instr_tbl_ext1a[] =
{    
	{0x0,"jmp",		ALPHA_GROUP_JMP},
	{0x1,"jsr",		ALPHA_GROUP_JMP},
	{0x2,"ret",		ALPHA_GROUP_JMP},
	{0x3,"jsr_co",		ALPHA_GROUP_JMP},
	{0xf,"",			ALPHA_ERROR}
};

/* table1c */
alpha_opcode_tab_entry alpha_instr_tbl_ext1c[] =
{
	{0x00,"sextb",		ALPHA_GROUP1},
	{0x01,"sextw",		ALPHA_GROUP1},
	{0x30,"ctpop",		ALPHA_GROUP1},
	{0x31,"perr",		ALPHA_GROUP1},
	{0x32,"ctlz",		ALPHA_GROUP1},
	{0x33,"cttz",		ALPHA_GROUP1},
	{0x34,"unpkbw",	ALPHA_GROUP1},
	{0x35,"unpkbl",	ALPHA_GROUP1},
	{0x36,"pkwb",		ALPHA_GROUP1},
	{0x37,"pklb",		ALPHA_GROUP1},
	{0x38,"minsb8",	ALPHA_GROUP1},
	{0x39,"minsw4",	ALPHA_GROUP1},
	{0x3a,"minub8",	ALPHA_GROUP1},
	{0x3b,"minuw4",	ALPHA_GROUP1},
	{0x3c,"maxub8",	ALPHA_GROUP1},
	{0x3d,"maxuw4",	ALPHA_GROUP1},
	{0x3e,"maxsb8",	ALPHA_GROUP1},
	{0x3f,"maxsw4",	ALPHA_GROUP1},
	{0x70,"ftoit",		ALPHA_GROUP_F2I},
	{0x78,"ftois",		ALPHA_GROUP_F2I},
	{0xff,"",			ALPHA_ERROR}
};

